/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package exercicio_10;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Gustavo
 */
public class Controle {

    private Empresa empresa;
    private Endereco endereco;
    private Departamento departamento;
    private Funcionario func;
    private Gerente ge;
    private Contato c;
    private List<Departamento> departamentos;
    private List<Funcionario> funcionarios;
    private List<Gerente> gerentes;

    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

    public List<Gerente> getGerentes() {
        return gerentes;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public List<Departamento> getDepartamentos() {
        return departamentos;
    }

    public void salvarDepartamento() {
        departamentos = new ArrayList();
        List<Funcionario> alocarFuncionarios = null;

        departamento = new Departamento("RH", null, 50000.00, null);
        departamentos.add(departamento);

        departamento = new Departamento("Comercial", null, 220000.00, null);
        departamentos.add(departamento);

        departamento = new Departamento("TI", null, 750000.00, null);
        departamentos.add(departamento);
        for (Departamento d : departamentos) {
            if (d.getArea().equalsIgnoreCase("Comercial")) {
                alocarFuncionarios = new ArrayList();
                for (Funcionario f : funcionarios) {
                    if ((f.getNome().equalsIgnoreCase("bruna")) || (f.getNome().equalsIgnoreCase("zeca")) || (f.getNome().equalsIgnoreCase("pedro"))) {
                        alocarFuncionarios.add(f);
                    }
                }
                for (Gerente g : gerentes) {
                    if (g.getNome().equalsIgnoreCase("Paulo")) {
                        d.setGerente(g);
                    }
                }
                d.setFuncionarios(alocarFuncionarios);
            } else if (d.getArea().equalsIgnoreCase("RH")) {
                alocarFuncionarios = new ArrayList();
                for (Funcionario f : funcionarios) {
                    if (f.getNome().equalsIgnoreCase("carla")) {
                        alocarFuncionarios.add(f);
                    }
                }
                for (Gerente g : gerentes) {
                    if (g.getNome().equalsIgnoreCase("Ana")) {
                        d.setGerente(g);
                    }
                }
                d.setFuncionarios(alocarFuncionarios);
            } else if(d.getArea().equalsIgnoreCase("TI")){
                alocarFuncionarios = new ArrayList();
                for (Funcionario f : funcionarios) {
                    if ((f.getNome().equalsIgnoreCase("guilherme")) || (f.getNome().equalsIgnoreCase("luana"))) {
                        alocarFuncionarios.add(f);
                    }
                }
                for (Gerente g : gerentes) {
                    if (g.getNome().equalsIgnoreCase("tavares")) {
                        d.setGerente(g);
                    }
                }
                d.setFuncionarios(alocarFuncionarios);
            }

        }

    }

    public void salvarGerente() {
        gerentes = new ArrayList();

        endereco = new Endereco("Rua das Acacias", 200, "Campinas", "São Jose", "SC");
        c = new Contato("(48) 3232-3245", "(48) 9966-0009", "ana@senac.com.br");
        ge = new Gerente("Ana", 23, "071.584.838-28", "F", endereco, 3000.00, c);
        gerentes.add(ge);

        endereco = new Endereco("Rua dos Diamantes", 9, "Centro", "Biglaçu", "SC");
        c = new Contato("(48) 3235-5544", "(48) 3232-5566", "paulo@senac.com.br");
        ge = new Gerente("Paulo", 41, "312.774.487-65", "M", endereco, 3000.00, c);
        gerentes.add(ge);

        endereco = new Endereco("Rua das Bromelias", 305, "Santa Monica", "Florianopolis", "SC");
        c = new Contato("(48) 3556-7700", "(48) 9400-9998", "tavares@senac.com.br");
        ge = new Gerente("Tavares", 52, "445.552.835-69", "M", endereco, 3000.00, c);
        gerentes.add(ge);
    }

    public void salvarFuncionario() {
        funcionarios = new ArrayList();

        endereco = new Endereco("Rua das Margaridas", 35, "Ingleses", "Florianopolis", "SC");
        c = new Contato("(48) 3434-4556", "(48) 3322-6677", "carla@senac.com.br");
        func = new Funcionario("Carla", 45, "011.550.836-79", "F", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua das Rosas", 1150, "Aririu", "Palhoça", "SC");
        c = new Contato("(48) 3200-0009", "(48) 3322-3333", "cintia@senac.com.br");
        func = new Funcionario("Cintia", 34, "227.514.858-99", "F", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua das Esmeraldas", 522, "Pedra Branca", "Palhoça", "SC");
        c = new Contato("(48) 3211-3321", "(48) 3229-3211", "bruna@senac.com.br");
        func = new Funcionario("Bruna", 29, "098.764.567-81", "F", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua das Figueiras", 16, "Estreito", "Florianopolis", "SC");
        c = new Contato("(48) 3230-6677", "(48) 3222-7788", "zeca@senac.com.br");
        func = new Funcionario("Zeca", 21, "025.184.924-68", "M", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua dos Eucaliptos", 1255, "Barreiros", "São Jose", "SC");
        c = new Contato("(48) 3232-5555", "(48) 3200-7788", "pedro_surf@senac.com.br");
        func = new Funcionario("Pedro", 33, "001.375.122-90", "M", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua dos Rubis", 15, "Barreiros", "Sao Jose", "SC");
        c = new Contato("(48) 4555-5555", "(48) 6677-8885", "guilherme@senac.com.br");
        func = new Funcionario("Guilherme", 25, "301.345.858-18", "M", endereco, 2000.00, c);
        funcionarios.add(func);

        endereco = new Endereco("Rua das Ametistas", 5522, "Coqueiros", "Florianopolis", "SC");
        c = new Contato("(48) 3355-6644", "(48) 3229-8886", "luana@senac.com.br");
        func = new Funcionario("Luana", 30, "789.014.854-51", "F", endereco, 2000.00, c);
        funcionarios.add(func);
    }

    public void salvarEmpresa() {
        endereco = null;
        endereco = new Endereco("Silva Jardim", 360, "Centro", "Florianopolis", "SC");
        empresa = new Empresa("SENAC", "23.456.789/0123-456", "WWW.SC.SENAC.BR", departamentos, endereco);

    }

    public void listar() {
        int somaIdadeRH = 0;
        int somaIdadeCOMERCIAL = 0;
        int RHcontM = 0;
        int RHcontF = 0;
        int COMERCIALcontM = 0;
        int COMERCIALcontF = 0;
        int NidadeRH = 100;
        int NidadeCOMERCIAL = 100;
        int VidadeRH = 0;
        int VidadeCOMERCIAL = 0;
        String dep;
        System.out.println("EMPRESA NOME---:" + empresa.getNome());
        System.out.println("EMPRESA CNPJ---:" + empresa.getCnpj());
        System.out.println("EMPRESA SITE---:" + empresa.getSite());
        System.out.println("===EMPRESA ENDERECO===");
        System.out.println("NUMERO---------:" + empresa.getEmderecoEmpresa().getNumero());
        System.out.println("RUA------------:" + empresa.getEmderecoEmpresa().getRua());
        System.out.println("BAIRRO---------:" + empresa.getEmderecoEmpresa().getBairro());
        System.out.println("CIDADE---------:" + empresa.getEmderecoEmpresa().getCidade());
        System.out.println("ESTADO---------:" + empresa.getEmderecoEmpresa().getEstado());
        System.out.println("========DEPARTAMENTO=========");
        for (Departamento d : empresa.getDepartamentos()) {
            System.out.println("DEPARTAMENTO :" + d.getArea());
            dep = d.getArea();
            System.out.println("======Gerente===========");
            System.out.println("NOME---------------:" + d.getGerente().getNome());
            System.out.println("CPF----------------:" + d.getGerente().getCpf());
            System.out.println("SEXO---------------:" + d.getGerente().getSexo());
            System.out.println("SALARIO----------:R$" + d.getGerente().getSalario());
            System.out.println("TELEFONE-----------:" + d.getGerente().getContato().getTelefone());
            System.out.println("CELULAR------------:" + d.getGerente().getContato().getCelular());
            System.out.println("E-MAIL-------------:" + d.getGerente().getContato().getEmail());
            System.out.println("ENDERECO");
            System.out.println("NUMERO-------------:" + d.getGerente().getEnderecoPessoa().getNumero());
            System.out.println("RUA----------------:" + d.getGerente().getEnderecoPessoa().getRua());
            System.out.println("BAIRRO-------------:" + d.getGerente().getEnderecoPessoa().getBairro());
            System.out.println("CIDADE-------------:" + d.getGerente().getEnderecoPessoa().getCidade());
            System.out.println("ESTADO-------------:" + d.getGerente().getEnderecoPessoa().getEstado());
            System.out.println("======Funcionarios======");
            for (Funcionario f : d.getFuncionarios()) {
                System.out.println("NOME-----------:" + f.getNome());
                System.out.println("CPF------------:" + f.getCpf());
                System.out.println("IDADE----------:" + f.getIdade() + " anos");
                System.out.println("SEXO-----------:" + f.getSexo());
                System.out.println("TELEFONE-------:" + f.getContato().getTelefone());
                System.out.println("CELUALR--------:" + f.getContato().getCelular());
                System.out.println("E-MAIL---------:" + f.getContato().getEmail());
                System.out.println("SALARIO------:R$" + f.getSalario());
                System.out.println("===ENDERECO====");
                System.out.println("NUMERO---------:" + f.getEnderecoPessoa().getNumero());
                System.out.println("RUA------------:" + f.getEnderecoPessoa().getRua());
                System.out.println("BAIRRO---------:" + f.getEnderecoPessoa().getBairro());
                System.out.println("CIDADE---------:" + f.getEnderecoPessoa().getCidade());
                System.out.println("ESTADO---------:" + f.getEnderecoPessoa().getEstado());

                if (dep.equalsIgnoreCase("RH")) {

                    if (f.getIdade() < NidadeRH) {
                        NidadeRH = f.getIdade();
                    } else {
                        VidadeRH = f.getIdade();
                    }
                    somaIdadeRH = somaIdadeRH + f.getIdade();
                    if (f.getSexo().equalsIgnoreCase("f")) {
                        RHcontF++;
                    } else {
                        RHcontM++;
                    }
                } else if(dep.equalsIgnoreCase("comercial")){

                    if (f.getIdade() < NidadeCOMERCIAL) {
                        NidadeCOMERCIAL = f.getIdade();
                    } else {
                        VidadeCOMERCIAL = f.getIdade();
                    }
                    if (f.getSexo().equalsIgnoreCase("f")) {
                        COMERCIALcontF++;
                    } else {
                        COMERCIALcontM++;
                    }
                    somaIdadeCOMERCIAL = somaIdadeCOMERCIAL + f.getIdade();
                }
                System.out.println("=======================");
            }
            System.out.println(" ");
        }
        System.out.println("Soma de idades do RH--------------------------------:" + somaIdadeRH + " anos");
        System.out.println("Soma de idades do COMERCIAL-------------------------:" + somaIdadeCOMERCIAL + " anos");
        System.out.println("Total das idades de RH e COMERCIAL------------------:" + (somaIdadeCOMERCIAL + somaIdadeRH) + " anos");
        System.out.println("Quantidade de Homens  no RH-------------------------:" + RHcontM);
        System.out.println("Quantidade de Mulheres  no RH-----------------------:" + RHcontF);
        System.out.println("Quantidade de Homens  no COMERCIAL------------------:" + COMERCIALcontM);
        System.out.println("Quantidade de Mulheres  no COMERCIAL----------------:" + COMERCIALcontF);
        System.out.println("Quantidade de Homens na empresa---------------------:" + (RHcontM + COMERCIALcontM));
        System.out.println("Quantidade de Mulheres na empresa-------------------:" + (COMERCIALcontF + RHcontF));
        System.out.println("Idade do Funcionario(a) Mais novo(a) do RH----------:" + NidadeRH);
        System.out.println("Idade do Funcionario(a) Mais velho(a) do RH---------:" + VidadeRH);
        System.out.println("Idade do Funcionario(a) Mais novo(a) do COMERCIAL---:" + NidadeCOMERCIAL);
        System.out.println("Idade do Funcionario(a) Mais velho(a) do COMERCIAL--:" + VidadeCOMERCIAL);
    }

    public void pesquisarFuncionarioPorCidade() {

        String cidade = JOptionPane.showInputDialog("Informe a cidade para pesquisar os funcionarios");

        for (Funcionario f : funcionarios) {
            if (f.getEnderecoPessoa().getCidade().equalsIgnoreCase(cidade)) {
                System.out.println("PESSOA NOME----:" + f.getNome());
                System.out.println("PESSOA CPF-----:" + f.getCpf());
                System.out.println("PESSOA IDADE---:" + f.getIdade() + " anos");
                System.out.println("PESSOA SEXO----:" + f.getSexo());
                System.out.println("===PESSOA ENDERECO====");
                System.out.println("NUMERO---------:" + f.getEnderecoPessoa().getNumero());
                System.out.println("RUA------------:" + f.getEnderecoPessoa().getRua());
                System.out.println("BAIRRO---------:" + f.getEnderecoPessoa().getBairro());
                System.out.println("CIDADE---------:" + f.getEnderecoPessoa().getCidade());
                System.out.println("ESTADO---------:" + f.getEnderecoPessoa().getEstado());
                System.out.println(" ");
                System.out.println("--------------------------------------");
                System.out.println(" ");
            }
        }
    }

    public void calculaImposto90porCento() {
        double totalf = 0;
        double totalg = 0;
        double totalt;
        DecimalFormat df = new DecimalFormat("#,###.00");
        for (Departamento d : departamentos) {
            totalg = totalg + (d.getGerente().getSalario() + (d.getGerente().getSalario() * 0.20));
            for (Funcionario f : d.getFuncionarios()) {

                totalf = totalf + f.getSalario();
            }
        }
        totalt = (totalf + totalg) * 0.90;
        System.out.println("======IMPOSTO 90%=====");

        System.out.println("TOTAL-----:R$" + df.format(totalt));
    }

    public void calculaSalarioTotal() {
        double totalf = 0;
        double totalg = 0;
        double totalt;
        DecimalFormat df = new DecimalFormat("#,###.00");
        for (Departamento d : departamentos) {
            totalg = totalg + (d.getGerente().getSalario() + (d.getGerente().getSalario() * 0.20));
            for (Funcionario f : d.getFuncionarios()) {

                totalf = totalf + f.getSalario();
            }
        }
        totalt = (totalf + totalg);
        System.out.println("====TOTAL A SER PAGO DE SALARIO==========");

        System.out.println("TOTAL-----:R$" + df.format(totalt));
    }

    public void calculaSalarioLiquido() {
        double salarioBruto;
        double inss = 0;
        double ir = 0;
        double salarioLiquido = 0;
        DecimalFormat df = new DecimalFormat("#,###.00");
        for (Departamento d : departamentos) {
            salarioBruto = d.getGerente().getSalario() + (d.getGerente().getSalario() * 0.20);
            inss = (salarioBruto * 0.10);
            ir = (salarioBruto - inss) * 0.15;
            salarioLiquido = salarioBruto - (inss + ir);
            System.out.println("====" + d.getArea() + "====");
            System.out.println("GERENTE");
            System.out.println("NOME--------------:" + d.getGerente().getNome());
            System.out.println("SALARIO BRUTO---:R$" + df.format(salarioBruto));
            System.out.println("INSS------------:R$" + df.format(inss));
            System.out.println("IR-------------:R$" + df.format(ir));
            System.out.println("SALARIO LIQUIDO-:R$" + df.format(salarioLiquido));
            for (Funcionario f : d.getFuncionarios()) {

                salarioBruto = f.getSalario();
                inss = (salarioBruto * 0.10);
                ir = (salarioBruto - inss) * 0.15;
                salarioLiquido = salarioBruto - (inss + ir);
                System.out.println("====" + d.getArea() + "====");
                System.out.println("Funcionario");
                System.out.println("NOME------------:" + f.getNome());
                System.out.println("SALARIO BRUTO---:R$" + df.format(salarioBruto));
                System.out.println("INSS------------:R$" + df.format(inss));
                System.out.println("IR--------------:R$" + df.format(ir));
                System.out.println("SALARIO LIQUIDO-:R$" + df.format(salarioLiquido));
                System.out.println(" ");
                System.out.println("--------------------------------------");
            }
        }

    }

  
}
